Personal computers, peripheral devices and data processing systems rely on memory when implementing operating systems and application programs. Techniques for managing memory are known in the art. For example, the delivery of print jobs to a printer involves the processing of a printer definition language (PDL). However, memory fragmentation is a problem encountered when processing a printer definition language (PDL). Memory fragmentation occurs when there is not enough contiguous memory.
For example, on some Hewlett-Packard LaserJet products, memory fragmentation has negatively affected throughput, and has resulted in memory outs. A memory out occurs when a block of requested memory is not available. Several firmware approaches are available which can alleviate this problem. First, data structures can be used which reside in fragmented memory. Secondly, fragmentation can be avoided by grouping like-sized or like-used allocations together. Thirdly, fragmentation can be reduced by relocating allocated memory objects to coalesce free space.
Several Hewlett-Packard LaserJet products have applied the first two approaches. For example, according to one implementation, the dissected compressed strip is provided as a data type that can reside in fragmented memory. According to another implementation, the personality scraps and array memory clients group like-sized allocations. According to a third implementation, various font memory clients group like-used allocations. Unfortunately the application of these techniques did not sufficiently alleviate the negative consequences of memory fragmentation for some products.